package com.diego.sistema.compras;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;

import com.diego.sistema.producto.Producto;

/**@author Diego Benitez - xuser83@hotmail.com*/


public class CompraDAOHibernate implements CompraDAO {
	private Session session;
	
	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}
	
	@Override
	public void registra(Compra compra) {
		this.session.save(compra);
	} 
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Compra> getLista() {
		Criteria lista = session.createCriteria(Compra.class);
		return lista.list();
	}

	@Override
	public void eliminar(Compra compra) {
		this.session.delete(compra);
		
	}

	@Override
	public boolean existeStockProducto(Producto producto) {
		
		Producto productobuscado = (Producto) this.session.get(Producto.class, producto.getId());
		
		if(productobuscado != null) {
			if(productobuscado.getStock() > 0){
				return true;
			}
		}
		return false;
	}

	@Override
	public void reduzStockProducto(Producto producto) {
		String hql = "update Producto p set p.stock =:nuevoStock where p.id =:idProducto";
		Query query = session.createQuery(hql);
		query.setInteger("nuevoStock", producto.getStock() - 1);
		query.setLong("idProducto", producto.getId());
		query.executeUpdate();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Compra> listarCompraPorFactura(String nrofactura) {

		String sql ="from Compra c where c.nroFactura like :nroFactura";
		Query consulta = session.createQuery(sql);
		consulta.setString("nroFactura", nrofactura);
		
		return  consulta.list();
	}
	
}

